﻿//Mouseover Tabs Menu: By http://www.dynamicdrive.com
//** Aug 4th, 08': Script creation date

var mouseovertabsmenu = {

    disappeardelay: 250, //set delay in miliseconds before sub menu disappears onmouseout
    ajaxloadingmsg: 'Loading Sub Menu Contents...', //Message to show inside sub menu while fetching contents

    ///////No need to edit beyond here//////////////////////

    tabsmenutree: {},

    initializetabs: function(tabsmenuid, submenuid, tabcontentsLength, disappearBool) {
        var tabmenu = document.getElementById(tabsmenuid)
        var tablinks = tabmenu.getElementsByTagName("a")
        var submenu = document.getElementById(submenuid)
        var selected = null, tablinks_count = 0
        for (var i = 0; i < tablinks.length; i++) {
            tablinks[i]._parentid = tabsmenuid
            var relattr = tablinks[i].getAttribute("rel")
            if (/^gotsubmenu/i.test(relattr) && tablinks_count < tabcontentsLength) { //if "rel" attribute starts with="gotsubmenu" and a tab content exists for this tab based on its order
                tablinks[i]._pos = tablinks_count //remember position of this tab relative to its active peers
                if (relattr.indexOf("[selected]") != -1) {
                    selected = tablinks_count
                }
                this.addEvent(tablinks[i], function() {
                    var tabsmenutree = mouseovertabsmenu.tabsmenutree[this._parentid]
                    mouseovertabsmenu.clearhidetimer(tabsmenutree.submenu.hidetimer)
                    mouseovertabsmenu.showsubmenu(this)
                }, "mouseover")
                tablinks_count++
                this.tabsmenutree[tabsmenuid].tabs.push(tablinks[i]) //add this tab to tab collection
            }
            else { //else for regular tab links (with no "rel" attribute)
                this.addEvent(tablinks[i], function() {
                    mouseovertabsmenu.hidesubmenu(this._parentid)
                }, "mouseover")
            }
        }
        this.addEvent(submenu, function(e) {
            mouseovertabsmenu.clearhidetimer(this.hidetimer)
        }, "mouseover")
        if (disappearBool == true) {
            this.addEvent(submenu, function(e) { //hide submenu contents when mouse rolls out of submenu DIV
                if (!mouseovertabsmenu.isContained(this, e)) {
                    var cursubmenuobj = this
                    this.hidetimer = setTimeout(function() { mouseovertabsmenu.hidesubmenu(cursubmenuobj._parentid) }, mouseovertabsmenu.disappeardelay)
                }
            }, "mouseout")
        }
        var urlselected = this.urlparamselect(tabsmenuid)
        //return position of selected tab (relative to its peers), or null
        return typeof urlselected == "number" ? urlselected : document.getElementById(urlselected) ? document.getElementById(urlselected)._pos : selected
    },

    ajaxload: function(tabsmenuid, submenuid, disappearBool, url) {
        var page_request = false
        if (window.ActiveXObject) { //Test for support for ActiveXObject in IE first (as XMLHttpRequest in IE7 is broken)
            try {
                page_request = new ActiveXObject("Msxml2.XMLHTTP")
            }
            catch (e) {
                try {
                    page_request = new ActiveXObject("Microsoft.XMLHTTP")
                }
                catch (e) { }
            }
        }
        else if (window.XMLHttpRequest) // if Mozilla, Safari etc
            page_request = new XMLHttpRequest()
        else
            return false
        var tabsmenutree = this.tabsmenutree[tabsmenuid]
        tabsmenutree.submenu.innerHTML = this.ajaxloadingmsg
        var ajaxfriendlyurl = url.replace(/^http:\/\/[^\/]+\//i, "http://" + window.location.hostname + "/")
        page_request.onreadystatechange = function() {
            mouseovertabsmenu.ajaxpopulate(page_request, tabsmenuid, submenuid, disappearBool, ajaxfriendlyurl)
        }
        var bustcache = (ajaxfriendlyurl.indexOf("?") != -1) ? "&" + new Date().getTime() : "?" + new Date().getTime()
        page_request.open('GET', ajaxfriendlyurl + bustcache, true)
        page_request.send(null)
    },

    ajaxpopulate: function(page_request, tabsmenuid, submenuid, disappearBool, url) {
        if (page_request.readyState == 4 && (page_request.status == 200 || window.location.href.indexOf("http") == -1)) {
            var tabsmenutree = this.tabsmenutree[tabsmenuid]
            tabsmenutree.submenu.innerHTML = page_request.responseText
            var innerdivs = tabsmenutree.submenu.getElementsByTagName("div")
            for (var i = 0; i < innerdivs.length; i++) {
                if (/tabsmenucontent/i.test(innerdivs[i].className)) {
                    tabsmenutree.submenu_divs.push(innerdivs[i])
                }
            }
            var selected = this.initializetabs(tabsmenuid, submenuid, tabsmenutree.submenu_divs.length, disappearBool)
            if (selected != null && selected < tabsmenutree.submenu_divs.length) {
                innerdivs[selected].style.display = "block"
                this.css(tabsmenutree.tabs[selected], "selected", "add")
                tabsmenutree.submenu._prevselected = selected
            }
        }
    },

    showsubmenu: function(linkobj) {
        var tabsmenutree = this.tabsmenutree[linkobj._parentid]
        this.hidesubmenu(linkobj._parentid)
        var selected = parseInt(linkobj._pos)
        tabsmenutree.submenu_divs[selected].style.display = "block"
        this.css(tabsmenutree.tabs[selected], "selected", "add")
        tabsmenutree.submenu._prevselected = selected
    },

    hidesubmenu: function(tabsmenuid) {
        var tabsmenutree = this.tabsmenutree[tabsmenuid]
        var prevselectedindex = tabsmenutree.submenu._prevselected
        if (typeof prevselectedindex != "undefined") {
            tabsmenutree.submenu_divs[prevselectedindex].style.display = "none"
            this.css(tabsmenutree.tabs[prevselectedindex], "selected", "remove")
        }
    },

    clearhidetimer: function(timerid) {
        if (timerid)
            clearTimeout(timerid)
    },

    css: function(el, targetclass, action) {
        var needle = new RegExp("(^|\\s+)" + targetclass + "($|\\s+)", "ig")
        if (action == "check")
            return needle.test(el.className)
        else if (action == "remove")
            el.className = el.className.replace(needle, "")
        else if (action == "add" && !needle.test(el.className))
            el.className += " " + targetclass
    },

    isContained: function(m, e) {
        var e = window.event || e
        var c = e.relatedTarget || ((e.type == "mouseover") ? e.fromElement : e.toElement)
        while (c && c != m) try { c = c.parentNode } catch (e) { c = m }
        if (c == m)
            return true
        else
            return false
    },

    urlparamselect: function(tabsmenuid) {
        var result = window.location.search.match(new RegExp(tabsmenuid + "=(\\w+)", "i")) //check for "?tabsmenuid=id_or_pos_of_selected_tab" in URL
        var selectedtabstr = RegExp.$1
        return /^\d+$/.test(selectedtabstr) ? parseInt(selectedtabstr) : selectedtabstr //return position or ID of selected tab (or null if niether found)
    },


    addEvent: function(target, functionref, tasktype) {
        if (target.addEventListener)
            target.addEventListener(tasktype, functionref, false);
        else if (target.attachEvent)
            target.attachEvent('on' + tasktype, function() { return functionref.call(target, window.event) });
    },

    init: function(tabsmenuid, submenuid, disappearBool) {
        this.tabsmenutree[tabsmenuid] = {}
        this.tabsmenutree[tabsmenuid].tabs = [] //array referencing the active tab links in this menu (ones with a "rel=gotsubmenu" attr)
        this.tabsmenutree[tabsmenuid].submenu = null //reference submenu DIV for this menu
        this.tabsmenutree[tabsmenuid].submenu_divs = [] //array referencing the submenu contents (external DIVs with class="tabsmenucontent")
        var submenu = document.getElementById(submenuid)
        submenu._parentid = tabsmenuid
        this.tabsmenutree[tabsmenuid].submenu = submenu //remember this DIV as menu's submenu container
        var remoteurl = submenu.getElementsByTagName("a")[0].getAttribute("href")
        this.ajaxload(tabsmenuid, submenuid, disappearBool, remoteurl)
    }

}

document.write('<style type="text/css">\n.tabsmenucontent{display:none}\n</style>')
